/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.resume.sinistre.services.impl;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import fr.generali.accueilclient.resume.sinistre.om.IResumeSinistre;
import fr.generali.refservcommuns.rce.liste.sinistres.consultationpersonneservice.DossierSinistre;
import fr.generali.refservcommuns.rce.liste.sinistres.consultationpersonneservice.ListeDossierSinistre;
import fr.generali.refservcommuns.rce.liste.sinistres.dto.cla.DTOSinistre;


/**
 * Classe de mapper utilisée par {@link ResumeSinistreService}
 *
 * @author Guillaume Lancelin
 */
@Component("resumeSinistreServiceMapper")
public class ResumeSinistreServiceMapper {

    /**
     * L'assembler
     */
    @Autowired
    @Qualifier("dtoSinistre2ResumeSinistreConverter")
    private Converter<DTOSinistre, IResumeSinistre> dtoSinistre2ResumeSinistreConverter;

    /**
     * Transforme un {@link ListeDossierSinistre} en une liste de {@link IResumeSinistre}.
     *
     * @param listeDossier la réponse du service S15
     * @return une liste de {@link IResumeSinistre}
     */
    public List<IResumeSinistre> mapperConsultationListeContratParIdClient(ListeDossierSinistre listeDossier) {
        List<IResumeSinistre> resultat = null;
        List<DossierSinistre> listeDossierSinistre = listeDossier.getDossierSinistre();

        if (listeDossier != null && CollectionUtils.isNotEmpty(listeDossierSinistre)) {
            resultat = new ArrayList<IResumeSinistre>();
            for (int i = 0; i < listeDossierSinistre.size(); i++) {
                DossierSinistre dossier = listeDossierSinistre.get(i);
                List<DTOSinistre> listeSinistres = dossier.getSinistres();
                if (listeSinistres != null) {
                    for (int j = 0; j < listeSinistres.size(); j++) {
                        IResumeSinistre resume = dtoSinistre2ResumeSinistreConverter.convert(listeSinistres.get(j));
                        if (resume != null) {
                            resume.setNumeroClient(dossier != null && dossier.getRolePersonne() != null
                                            ? dossier.getRolePersonne().getIdentifiantPersonne() : null);
                            resultat.add(resume);
                        }
                    }
                }
            }
        }

        return resultat;
    }
}
